/*
 * Copyright (C) 2008 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.example.RemindMe;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


 //Definiert die CRUD - Operationen.
public class NotesDbAdapter {

    //Datenbank-Name, Tabellenname, Datenbankversion
    private static final String DATABASE_NAME = "data";
    private static final String DATABASE_TABLE = "notes";
    private static final int DATABASE_VERSION = 2;


    //Attribute(Spalten) der Tabelle "notes"
    public static final String KEY_TITLE = "title";
    public static final String KEY_BODY = "body";
    public static final String KEY_ROWID = "_id";
    

    private static final String TAG = "NotesDbAdapter";

    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;

    /**
     * Tabelle "noted" anlegen mit 3 Spalten:
     *
     * 1)id als primary key (autoincrement = key bei jedem Eintrag erhöht)
     * 2)title - Text
     * 3)body  = Text
     */
    private static final String DATABASE_CREATE =
        "create table notes (_id integer primary key autoincrement, "
        + "title text not null, body text not null);";


    //Kontext
    private final Context mCtx;

    //Hilfsklasse um Datenbank zu erstellen
    public static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {

            //Kontext , Datenbankname und die Version der Datenbank dem Konstruktor als Parameter übergeben
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }


        //Datenbank erstellen - SQL Statement ausführen(DATABASE_CREATE)
        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

        //Falls die DB exisitert wird sie gelöscht und die onCreate-Methode wird aufgerufen
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS notes");
            onCreate(db);
        }
    }

    /**
     * Konstruktor - bekommt als Parameter den Context um die Datenbank erstellen zu können
     * Der Context wird üblicherweise öfters gebraucht um mit dem Android System zu kommunizieren.
     */
    public NotesDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }
    
    public NotesDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase(); //Datenbank öffnen
        return this;
    }

    public void close() {
        mDbHelper.close();
    }


    /**
     * Erstellt eine neue Notiz mit dem Titel und body und gibt ihre id zurück
     *
     */
    public long createNote(String title, String body) {
        ContentValues initialValues = new ContentValues(); //die zu speichernde Werte
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_BODY, body);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }



    public boolean deleteNote(long rowId) {

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }



    public Cursor fetchAllNotes() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
                KEY_BODY}, null, null, null, null, null);
    }


    public Cursor fetchNote(long rowId) throws SQLException {

        Cursor mCursor =

            mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }


    public boolean updateNote(long rowId, String title, String body) {
        ContentValues args = new ContentValues();
        args.put(KEY_TITLE, title);
        args.put(KEY_BODY, body);

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
    
    public void deleteDB(){
    	 mDbHelper = new DatabaseHelper(mCtx);
         mDb = mDbHelper.getWritableDatabase(); //Datenbank öffnen
         mDb.delete(DATABASE_TABLE, null, null);
    	
    }
}
